package Test;

import Class.ClassMate;

import java.util.ArrayList;
import java.util.Scanner;

public class Test {
    private Test(){}
    public static void StudentInfoSystem() {
        // 创建扫描器对象，用于接收用户输入
        Scanner scanner = new Scanner(System.in);
        // 创建ArrayList集合，用于存储学生对象
        ArrayList<ClassMate> list = new ArrayList<ClassMate>();
        // 初始化添加4个学生对象到集合中
        ClassMate s1 = new ClassMate("1001", "田梦喊", 20, "河北省衡水市");
        ClassMate s2 = new ClassMate("1002", "田小红", 21, "河北省衡水市");
        ClassMate s3 = new ClassMate("1003", "田小明", 22, "河北省衡水市");
        ClassMate s4 = new ClassMate("1004", "田小理", 18, "河北省衡水市");
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        // 无限循环，实现系统的持续运行
        while (true) {
            // 显示系统主菜单
            Desktop();
            System.out.print("请输入键位：");
            int key = scanner.nextInt();

            // 判断用户输入的功能键，执行对应的操作
            if (key == 0) {
                System.out.println("已退出学生信息管理系统");
                break;// 退出系统
            } else {
                switch (key) {
                    case 1 -> addDate(list); // 添加学生信息
                    case 2 -> {             // 查询学生信息
                        System.out.print("请输入需查询的学号:");
                        String id = scanner.next();
                        searchDate(list, id);
                    }
                    case 3 -> {  // 删除学生信息
                        System.out.print("请输入需删除的学号:");
                        String id = scanner.next();
                        delDate(list, id);
                    }
                    case 4 -> {// 修改学生信息
                        System.out.print("请输入需修改的学号:");
                        String id = scanner.next();
                        setDate(list, id);
                    }
                    case 5 -> getDate(list);  // 查看全部学生信息
                    default -> System.out.println("键位输入错误！！！");
                }
            }
        }
    }
    /**
     * 显示系统主菜单
     * 展示所有可用功能及对应的操作键位
     */
    private static void Desktop() {
        System.out.println("=========学生信息管理系统==========");
        System.out.println("==   1        添加学生信息      ==");
        System.out.println("==   2        查询学生信息      ==");
        System.out.println("==   3        删除学生信息      ==");
        System.out.println("==   4        修改学生信息      ==");
        System.out.println("==   5        全部学生信息      ==");
        System.out.println("==   0        退出学生系统      ==");
        System.out.println("================================");
    }
    /**
     * 检查学生信息是否已存在
     * @param list 存储学生对象的集合
     * @param id 要检查的学生学号
     * @return 存在返回true，不存在返回false
     */
    private static boolean flag(ArrayList<ClassMate> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) return true;
        }
        return false;
    }
    /**
     * 添加学生信息到集合中
     * @param list 存储学生对象的集合
     */
    private static void addDate(ArrayList<ClassMate> list) {
        Scanner scanner = new Scanner(System.in);
        ClassMate s = new ClassMate();
        // 获取用户输入的学生信息
        System.out.print("请输入学生学号：");
        String id = scanner.next();
        System.out.print("请输入学生姓名：");
        String name = scanner.next();
        System.out.print("请输入学生年龄：");
        int age = scanner.nextInt();
        System.out.print("请输入学生所在地：");
        String address = scanner.next();
        // 检查学号是否已存在，不存在则添加
        if (!flag(list, id)) {
            s.setId(id);
            s.setName(name);
            s.setAge(age);
            s.setAddress(address);
            list.add(s);
            System.out.println("信息添加成功");
        } else {
            System.out.println("该信息已存在，添加失败");
        }
    }
    /**
     * 根据学号查询学生信息
     * @param list 存储学生对象的集合
     * @param id 要查询的学生学号
     */
    private static void searchDate(ArrayList<ClassMate> list, String id) {
        // 检查学号是否存在
        if (flag(list, id)) {
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getId().equals(id)) {
                    // 输出找到的学生信息
                    System.out.println("学号：" + list.get(i).getId() + " "
                            + "姓名：" + list.get(i).getName() + " "
                            + "年龄：" + list.get(i).getAge() + " "
                            + "地址：" + list.get(i).getAddress());
                    break;// 找到后退出循环
                }
            }
        } else {
            System.out.println("该学生信息不存在，无法查询");
        }
    }
    /**
     * 根据学号删除学生信息
     * @param list 存储学生对象的集合
     * @param id 要删除的学生学号
     */
    private static void delDate(ArrayList<ClassMate> list, String id) {
        if (flag(list, id)) {
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getId().equals(id)) {
                    list.remove(list.get(i));// 移除找到的学生对象
                    break; // 删除后退出循环
                }
            }
            System.out.println("信息删除成功");
        } else {
            System.out.println("该学生信息不存在，无法删除");
        }
    }
    /**
     * 根据学号修改学生信息
     * @param list 存储学生对象的集合
     * @param id 要修改的学生学号
     */
    private static void setDate(ArrayList<ClassMate> list, String id) {
        Scanner scanner = new Scanner(System.in);
        // 检查学号是否存在
        if (flag(list, id)) {
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).getId().equals(id)) {
                    // 获取并更新学生信息
                    System.out.print("请输入需修改姓名：");
                    String name = scanner.next();
                    list.get(i).setName(name);

                    System.out.print("请输入需修改年龄：");
                    int age = scanner.nextInt();
                    list.get(i).setAge(age);

                    System.out.print("请输入需修改地址：");
                    String address = scanner.next();
                    list.get(i).setAddress(address);

                    break; // 修改后退出循环
                }
            }
            System.out.println("信息修改成功");
        } else {
            System.out.println("该学生信息不存在，无法修改");
        }
    }
    /**
     * 显示所有学生的信息
     * @param list 存储学生对象的集合
     */
    private static void getDate(ArrayList<ClassMate> list) {
        // 遍历集合，输出每个学生的信息
        for (int i = 0; i < list.size(); i++) {
            System.out.println("学号：" + list.get(i).getId() + " "
                    + "姓名：" + list.get(i).getName() + " "
                    + "年龄：" + list.get(i).getAge() + " "
                    + "地址：" + list.get(i).getAddress());
        }
    }
}
